from django.conf import settings
from django.core.files.storage import FileSystemStorage
from fdfs_client.client import Fdfs_client

# meiduo_mall.utils.fastdfs.storage.py
class FdfsStorage(FileSystemStorage):
    """自定义文件存储系统类"""

    def _save(self, name, content):
        """
        当用户通过django管理后台上传文件时,调用此方法保存文件到FastDFS服务器中
        :param name: 传入的文件名
        :param content: 文件内容
        :return: 上传文件的路径
        """
        # todo: 自定义存储：保存文件到FastDFS服务器
        client = Fdfs_client('/home/python/PycharmProjects/meiduo/meiduo_mall/meiduo_mall/utils/fdfs/client.conf')
        dict_data = client.upload_by_buffer(content.read())

        if 'Upload successed.' != dict_data.get('Status'):

            raise Exception('上传文件到FastDFS失败')

        # 获取文件id django会自动保存到数据库中
        path = dict_data.get('Remote file_id')
        print(path)
        return path

    # 富文本编辑字段解决上传图片问题  访问路径加上主机地址
    def url(self, name):
        """
        返回文件的完整URL路径
        :param name: 　数据库中保存的文件名。类似：
                        group1/M00/00/00/wKg8gVvxLrGAQsSDAAKMeA8XyfQ6694565.png
        :return:       完整的URL
        """
        # 在settings(dev.py)文件中定义个常量来完成访问fastdfs文件路径的主机地址的添加　
        return settings.FDFS_URL + name